#include <stdio.h>
void main()
{
    // 声明了一个变量intPtr，它是一个指针，指向的内存地址存放的是一个整数
    // 声明指针变量之后，编译器会为指针变量本身分配一个内存空间，但是这个内存空间里面的值是随机的，也就是说，指针变量指向的值是随机的。
    // 这时一定不能去读写指针变量指向的地址，因为那个地址是随机地址，很可能会导致严重后果
    int *p = NULL; // NULL是一个宏，表示空指针，输出为 nil
    printf("%p\n", p);
    int num = 1;
    p = &num; // &取变量的地址
    // p = &1;             // error，不能取字面量的地址
    printf("%p\n", p);  // 变量num的地址
    printf("%d\n", *p); // 解引用：通过*指针访问变量的值

    // 一个指针指向的可能还是指针，这时就要用两个星号**表示。
    int **pp = &p;        // 指向指针的指针
    printf("%p\n", pp);   // 指针p的地址
    printf("%p\n", *pp);  // 指针p的值，即变量num的地址
    printf("%d\n", **pp); // 通过指针的指针访问变量num的值
}